home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1995 #3 & #4 / Amiga Plus CD - 1995 - No. 3 and 4.iso / pd / sound / cybersound / 14bit.driver / source / driverbase.h < prev    next >
C/C++ Source or Header  |  1995-07-20  |  5KB  |  153 lines

  1. /*****************************************************************************
  2.  *
  3.  * CyberSound: 14 Bit sound driver
  4.  *
  5.  * (c) 1995 by Christian Buchner
  6.  *
  7.  *****************************************************************************
  8.  *
  9.  * driverbase.h
  10.  */
  11.  
  12. #include <exec/types.h>
  13. #include <exec/libraries.h>
  14. #include <exec/interrupts.h>
  15. #include <dos/dos.h>
  16.  
  17. #include <clib/exec_protos.h>
  18. #include <pragmas/exec_pragmas.h>
  19.  
  20. /*****************************************************************************/
  21.  
  22. struct DriverBase
  23. {
  24.     struct    Library    db_Lib;
  25.     BPTR    db_SegList;
  26.     struct    DosLibrary *db_DOSBase;
  27.     struct    IntuitionBase *db_IntuitionBase;
  28.     struct    GfxBase *db_GfxBase;
  29.     struct    MsgPort *db_AudioReply;
  30.     struct    IOAudio *db_AudioRequest;
  31.     APTR    db_OldAudVector0;
  32.     APTR    db_OldAudVector1;
  33.     APTR    db_OldAudVector2;
  34.     APTR    db_OldAudVector3;
  35.     struct    Interrupt db_AudioVector;
  36.     struct    Interrupt db_NOPVector;
  37.     UWORD    *db_ConversionTable;
  38.     ULONG    db_BUFFER_SIZE;
  39.     ULONG    db_QUEUE_SIZE;
  40.     UBYTE    *db_DMABuffer1;
  41.     UBYTE    *db_DMABuffer2;
  42.     struct StreamInfo *db_QueueBuffer;
  43.     ULONG    db_ProvidePos;
  44.     ULONG    db_PlayPos;
  45.     UWORD    db_CurrentBuffer;
  46.     UWORD    db_LastPeriod;
  47.     UWORD    db_DriverFlags;
  48.     struct Screen *db_CurrentScreen;
  49.     ULONG    db_CurrentModeID;
  50.     UWORD    db_CurrentMinPer;
  51.     UWORD    db_NestLevel;
  52.     UBYTE    *db_AdditiveArray;
  53.     ULONG    db_CurrentFormat;
  54. };
  55.  
  56. /*****************************************************************************/
  57.  
  58. #define FLGB_PLAYING 0
  59. #define FLGB_NEEDIRQ 1
  60. #define FLGB_FLUSH 2
  61. #define FLGB_PAUSE 3
  62.  
  63. #define FLGF_NEEDIRQ (1<<FLGB_NEEDIRQ)
  64. #define FLGF_PLAYING (1<<FLGB_PLAYING)
  65. #define FLGF_FLUSH   (1<<FLGB_FLUSH)
  66. #define FLGF_PAUSE   (1<<FLGB_PAUSE)
  67.  
  68. /*****************************************************************************/
  69.  
  70. #define SegList db->db_SegList
  71. #define DOSBase db->db_DOSBase
  72. #define IntuitionBase db->db_IntuitionBase
  73. #define GfxBase db->db_GfxBase
  74. #define AudioReply db->db_AudioReply
  75. #define AudioRequest db->db_AudioRequest
  76. #define OldAudVector0 db->db_OldAudVector0
  77. #define OldAudVector1 db->db_OldAudVector1
  78. #define OldAudVector2 db->db_OldAudVector2
  79. #define OldAudVector3 db->db_OldAudVector3
  80. #define AudioVector db->db_AudioVector
  81. #define NOPVector db->db_NOPVector
  82. #define ConversionTable db->db_ConversionTable
  83. #define BUFFER_SIZE db->db_BUFFER_SIZE
  84. #define QUEUE_SIZE db->db_QUEUE_SIZE
  85. #define DMABuffer1 db->db_DMABuffer1
  86. #define DMABuffer2 db->db_DMABuffer2
  87. #define QueueBuffer db->db_QueueBuffer
  88. #define ProvidePos db->db_ProvidePos
  89. #define PlayPos db->db_PlayPos
  90. #define CurrentBuffer db->db_CurrentBuffer
  91. #define LastPeriod db->db_LastPeriod
  92. #define DriverFlags db->db_DriverFlags
  93. #define CurrentScreen db->db_CurrentScreen
  94. #define CurrentModeID db->db_CurrentModeID
  95. #define CurrentMinPer db->db_CurrentMinPer
  96. #define NestLevel db->db_NestLevel
  97. #define AdditiveArray db->db_AdditiveArray
  98. #define CurrentFormat db->db_CurrentFormat
  99.  
  100. /*****************************************************************************/
  101.  
  102. struct StreamInfo
  103. {
  104.     UWORD *si_left;
  105.     UWORD *si_right;
  106.     ULONG si_samples;
  107.     UWORD si_interleave;
  108.     ULONG si_period;
  109.     void (*si_callback)(void);
  110.     ULONG si_offset;
  111. };
  112.  
  113. /*****************************************************************************/
  114.  
  115. /* Library.c */
  116. struct Library * __asm LibInit ( register __d0 struct DriverBase *db , register __a0 BPTR seglist , register __a6 struct Library *sysbase );
  117. LONG __asm LibOpen ( register __a6 struct DriverBase *db );
  118. LONG __asm LibClose ( register __a6 struct DriverBase *db );
  119. LONG __asm LibExpunge ( register __a6 struct DriverBase *db );
  120.  
  121. /* Driver.c */
  122.  
  123. BOOL InitDriver( struct DriverBase *db );
  124. void DeInitDriver( struct DriverBase *db );
  125.  
  126. BOOL __asm SetBuffers( register __d0 ULONG audiosize, register __d1 ULONG queuesize, register __a6 struct DriverBase *db );
  127. void __asm FreeBuffers( register __a6 struct DriverBase *db );
  128.  
  129. BOOL __asm StreamFormat( register __d0 ULONG format, register __a6 struct DriverBase *db );
  130.  
  131. ULONG __asm AskFrequency( register __d0 ULONG frequency, register __a6 struct DriverBase *db );
  132. ULONG __asm AskPeriod( register __d0 ULONG frequency, register __a6 struct DriverBase *db );
  133.  
  134. BOOL __asm ProvideStream( register __a0 UWORD *left,register __a1 UWORD *right,register __d0 ULONG samples, register __d1 UWORD interleave, register __d2 ULONG frequency,register __a2 void (*callback)(void), register __a6 struct DriverBase *db );
  135.  
  136. void __asm FlushStream( register __a6 struct DriverBase *db );
  137.  
  138. void __asm PauseStream( register __a6 struct DriverBase *db );
  139. void __asm ResumeStream( register __a6 struct DriverBase *db );
  140.  
  141. void __asm AudioInterrupt( register __d1 UWORD ActiveInt,register __a0 struct Custom * custom, register __a1 struct DriverBase *db, register __a6 SysBase );
  142. void __asm StopDMA( register __a6 struct DriverBase *db );
  143. void __asm NOPInterrupt( register __d1 UWORD ActiveInt,register __a0 struct Custom * custom, register __a1 struct DriverBase *db, register __a6 SysBase );
  144.  
  145. void __asm SD_Lock( register __a6 struct DriverBase *db );
  146. void __asm SD_Unlock( register __a6 struct DriverBase *db );
  147.  
  148. /* AsmSupport.asm */
  149.  
  150. void __asm CreateTable(register __a0 UWORD *Table, register __a1 UBYTE *Array);
  151. void __asm ConvertStream(register __a0 UWORD *Stream, register __a1 UBYTE *MSBChannel, register __a2 UBYTE *LSBChannel, register __a3 UWORD *Table, register __d0 ULONG samples, register __d1 UWORD interleave);
  152. void __asm SwapEndian(register __a0 UWORD *Table);
  153.